// ==UserScript==
// @copyright  	2014+, Asion Tang
// @namespace  	http://AsionTang.CN

// @name       	YE功能增强.04 - [百度]
// @description 隐藏百度推广、百度链接反跳转
// @run-at      document-end
// @iconURL     http://baidu.com/favicon.ico
// @downloadURL	https://gitee.com/AsionTang/52.ScriptLibrary/raw/master/YeJS/04.BaiDu.user.js

// @version    	240222.02.03.007
// @history		2015.06.28:完善了百度推广广告的移除代码
// @history     2014.08.30:增加了隐藏百度推广、百度链接反跳转功能
// @history     2024.02.22:将推广关键字替换为广告

// @match      	www.baidu.com/*
// @grant       GM_xmlhttpRequest
// ==/UserScript==

(function() {
    //================================================================================
    // 02.百度搜索反跳转功能
    //================================================================================
    // ==UserScript==
    // @name         BaiduSearchNoJump
    // @namespace    https://github.com/ywzhaiqi
    // @authuer      ywzhaiqi
    // @description  百度搜索反跳转，增加了翻页脚本的支持、不刷新页面的支持。
    // @include      http://www.baidu.com/*
    // @homepageURL  https://greasyfork.org/scripts/1771/
    // updateURL     https://userscripts.org/scripts/source/161812.meta.js
    // downloadURL   https://userscripts.org/scripts/source/161812.user.js
    // @icon         http://tb.himg.baidu.com/sys/portrait/item/d4346e6f65313332ac06
    // @version      2014.08.19
    // @grant        GM_xmlhttpRequest
    // @run-at       document-end
    // @note         2014-08-19，小幅调整
    // @note         2014-07-23，增加新的链接选择器 a[href^="//www.baidu.com/link?url="]
    // @note         2014-06-10，放弃原服务器解析的方法，改用 HEAD 方式。
    // @note         2014-05-28，增加对百度不刷新页面的支持
    // @note         2014-05-24，增加对翻页脚本的支持
    // ==/UserScript==
    var locationHref = location.href;
    function decode(url, target) {
        GM_xmlhttpRequest({
            method: 'HEAD',
            url: url,
            headers: {
                "Referer": locationHref,
            },
            onload: function(response) {
                var newUrl = response.finalUrl;
                target.setAttribute('href', newUrl);
            }
        });
    }
    function checkDocument(doc) {
        if (!doc)
            doc = document;
        var links = doc.querySelectorAll('a[href*="www.baidu.com/link?url="]');
        if (!links)
            return;

        [].forEach.call(links, function(link) {
            // console.log('decode url: ', link.href)
            decode(link.href, link);
        });
    }
    function addMutationObserver(selector, callback) {
        var watch = document.querySelector(selector);
        if (!watch)
            return;

        var observer = new MutationObserver(function(mutations) {
            var nodeAdded = mutations.some(function(x) {
                return x.addedNodes.length > 0;
            });
            if (nodeAdded) {
                // observer.disconnect();
                callback();
            }
        }
        );
        observer.observe(watch, {
            childList: true,
            subtree: true
        });
    }
    checkDocument();
    // 添加下一页和不刷新页面的支持
    addMutationObserver('#wrapper_wrapper', function() {
        // console.log('元素被添加')
        checkDocument();
    });
}
)//()
;
(function() {
    //================================================================================
    // 01.隐藏所有百度推广的内容
    //================================================================================
    document.onclick = function() {
        console.log('onclick');
        var tryCount = 0;
        var id = setInterval(function() {
            var adCount = 0;

            //检测具有'广告'字样的项
            var container = document.getElementById('content_left');
            var items = container ? container.children : [];
            for (var i = 0; i < items.length; i++) {
                var item = items[i];
                if (item.innerText.indexOf('广告') > -1) {
                    adCount++;
                    item.parentElement.removeChild(item);
                    console.log(item.innerText);
                }
            }

            //检测具有特殊样式的广告
            var items = document.querySelectorAll('[style*="!important"]');
            adCount += items.length;

            console.log("发现广告数量:" + adCount);

            if (adCount == 0) {
                //重复检测广告N次还是检测不到，则停止检测。
                if (tryCount++ >= 20) {
                    tryCount = 0;
                    clearInterval(id);
                    return;
                }
                return;
            }
            tryCount = 0;

            for (var i = 0; i < items.length; i++) {
                var item = items[i];
                item.parentElement.removeChild(item);
            }
        }, 50);
    }
    ;
    //马上执行一次。
    document.onclick();
}
)();
